Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 <<   zurück
Visual Basic 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual Basic 2005

Visual Basic 2005
1.233 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-585-1
gp Kapitel 10 Einige wichtige .NET-Klassen
  gp 10.1 Die Klasse »Object«
    gp 10.1.1 Der Konstruktor
    gp 10.1.2 Die Methoden der Klasse »Object«
  gp 10.2 Die Klasse »String«
    gp 10.2.1 Das Erzeugen eines Strings
    gp 10.2.2 Unveränderliche »String«-Objekte
    gp 10.2.3 Die Eigenschaften von »String«
    gp 10.2.4 Die Methoden der Klasse »String«
    gp 10.2.5 Zusammenfassung der Klasse »String«
  gp 10.3 Die Klasse »StringBuilder«
    gp 10.3.1 Allgemeines
    gp 10.3.2 Die Kapazität eines »StringBuilder«-Objekts
    gp 10.3.3 Die Konstruktoren der Klasse »StringBuilder«
    gp 10.3.4 Die Eigenschaften der Klasse »StringBuilder«
    gp 10.3.5 Die Methoden der Klasse »StringBuilder«
    gp 10.3.6 Allgemeine Anmerkungen
  gp 10.4 Der Typ »DateTime«
    gp 10.4.1 Die Zeitspanne »Tick«
    gp 10.4.2 Die Konstruktoren von »DateTime«
    gp 10.4.3 Die Eigenschaften von »DateTime«
    gp 10.4.4 Die Methoden der Klasse »DateTime«
    gp 10.4.5 Die Klasse »TimeSpan«
  gp 10.5 Die Klasse »Array«
    gp 10.5.1 Das Erzeugen eines »Array«-Objekts
    gp 10.5.2 Die Eigenschaften eines »Array«-Objekts
    gp 10.5.3 Die Methoden der Klasse »Array«
    gp 10.5.4 Array-Elemente sortieren
  gp 10.6 Ausgabeformatierung
    gp 10.6.1 Formatierung mit der Methode »String.Format«
    gp 10.6.2 Formatierung mit der Methode »ToString«
    gp 10.6.3 Benutzerdefinierte Formatierung


Galileo Computing

10.3 Die Klasse »StringBuilder«  downtop


Galileo Computing

10.3.1 Allgemeines  downtop

Objekte der Klasse String sind unveränderlich, d.  h., dass bei jeder String-Operation neuer Speicher allokiert wird, in den das geänderte String-Objekt geschrieben wird. Das ist sogar unabhängig davon, ob sich die Länge der Zeichenkette ändert. Führen Sie viele manipulierende Operationen aus, hat das Einbußen der Systemleistung zur Konsequenz.

Um sich einen Eindruck zu machen, wie sehr die Effizienz bei vielen String-Operationen beeinträchtigt wird, lassen wir in einer Schleife 50000 Änderungen an einer Zeichenfolge vornehmen. Folgerichtig müssen auch ebenso viele neue Objekte erzeugt und, bis auf das letzte, freigegeben werden.


Dim str As String = ""
For i As Integer= 1 To 50000
str += "x"
Next

Probieren Sie das Codefragment ruhig einmal aus! Auch auf einem gut ausgestatteten Rechner werden die Operationen eine längere Zeitspanne beanspruchen, bis das Ergebnis vorliegt.

Einen Ausweg aus diesem Dilemma bietet die Klasse StringBuilder, die zum Namespace System.Text gehört. StringBuilder-Objekte sind dynamisch. Sie können verändert werden, ohne dass damit zwangsläufig eine Neuallokierung von Speicher erforderlich wird.

Natürlich interessiert uns auch der Performancegewinn. Daher schreiben wir das Codefragment von oben so um, dass anstelle des Typs String die Klasse StringBuilder eingesetzt wird.


Dim str As New StringBuilder
Dim i As Integer
For i = 1 To 50000
str = str.Append("x")
Next

Der Leistungsgewinn ist deutlich zu erkennen und beweist, welchem Typ der Vorzug gegeben werden sollte: eindeutig dem StringBuilder.


Galileo Computing

10.3.2 Die Kapazität eines »StringBuilder«-Objekts  downtop

Sie müssen zwei Begriffe sorgfältig trennen, wenn Sie die Arbeitsweise dieses Objekttyps verstehen wollen: die Kapazität und die Länge der beschriebenen Zeichenfolge. Die Kapazität beschreibt die maximale Anzahl der Zeichen, die ein StringBuilder-Objekt enthalten kann. Die Kapazität kann also größer sein als die Länge der Zeichenfolge, aber nicht umgekehrt.

Nehmen wir dazu ein Beispiel. Wir erzeugen mit einem der Konstruktoren ein StringBuilder-Objekt und weisen ihm die Zeichenfolge »Visual Basic« zu:


Imports System.Text
...
Dim str As StringBuilder = New StringBuilder("Visual Basic")

Die Zeichenfolge ist neun Zeichen lang. Da wir keine explizite Aussage über die Kapazität getroffen haben, wird ein Objekt von der Größe der Standardkapazität erzeugt – und die beträgt 16 Zeichen. Weisen Sie dem StringBuilder-Objekt eine Zeichenkette zu, die mehr als 16 Zeichen, jedoch weniger als 33 Zeichen umfasst, wird die Kapazität auf 32 Zeichen festgelegt. Beträgt die Länge des Strings mehr als 32 Zeichen, jedoch weniger als 65, verdoppelt sich die Kapazität von 32 auf 64 Zeichen usw.

Werden Methoden auf dieses Objekt angewendet, die zur Folge haben, dass die Kapazitätsgrenze nicht überschritten wird, wird kein neuer Speicher allokiert. Die Änderungen laufen innerhalb der alten Speicherressourcen ab. Sollten bei einer Änderung jedoch die Kapazitätsgrenzen überschritten werden, wird die Kapazität des StringBuilder-Objekts automatisch vergrößert.


Galileo Computing

10.3.3 Die Konstruktoren der Klasse »StringBuilder«  downtop

Vornehmlich geht es bei den Konstruktoren darum, dem StringBuilder-Objekt eine Initialisierungszeichenfolge zuzuweisen und die Anfangskapazität festzulegen.


Public Sub New ()
Public Sub New (Integer)
Public Sub New (String)
Public Sub New (String, Integer)

Bei der Festlegung der Kapazität im Parameter vom Typ Integer müssen Sie sich nicht an die Sprünge 16, 32, 64, 128 usw. halten, die das StringBuilder-Objekt im Bedarfsfall automatisch durchführt. Theoretisch kann eine Zeichenfolge die Größe von 231   – 1 Zeichen aufnehmen. Um diesem nahezu endlosen Spiel einen Riegel vorzuschieben, bietet sich ein weiterer Konstruktor an, mit dem Sie die maximale Kapazitätsgrenze festlegen können:


Public Sub New (Integer, Integer)

Der erste Parameter erwartet die Startkapazität, der zweite die zulässige Maximalgröße. Wird diese zur Laufzeit überschritten, wird die Ausnahme ArgumentOutOfRangeException ausgelöst.


Galileo Computing

10.3.4 Die Eigenschaften der Klasse »StringBuilder«  downtop

Die Liste der Eigenschaften umfasst nur insgesamt vier Mitglieder.

Mit Capacity können Sie die aktuelle Kapazität abfragen, setzen oder auch verringern. Zu verwechseln ist Capacity nicht mit der Eigenschaft Length, die, wie schon von der Klasse String her bekannt, die Anzahl der Zeichen der vom Objekt repräsentierten Zeichenfolge wiedergibt.

MaxCapacity gibt die äußerste Maximalgröße des StringBuilder-Objekts wieder. Diese Eigenschaft ist schreibgeschützt und kann daher auch nur gelesen werden. Einzig und allein über die Konstruktoren sind Sie in der Lage, Einfluss auf dieses Charakteristikum auszuüben. Haben Sie MaxCapacity nicht definiert, liefert diese Eigenschaft den Maximalwert dieses Typs (231   – 1) zurück.

Die vierte und letzte Eigenschaft lautet Chars und ist parametrisiert:


Public Default Property Chars(Integer) As Char

Chars liefert ein Zeichen aus der gegebenen Zeichenfolge zurück, dessen Index Sie der Parameterliste übergeben. Auch bei der Indizierung der Zeichen eines StringBuilder-Objekts ist der erste Index auf 0 festgelegt. Wenn Sie sich aus der Zeichenfolge


Dim strB As New StringBuilder("Freitagabend")

den fünften Buchstaben zurückgeben lassen wollen, müssen Sie folgende Anweisung schreiben:


Dim c As Char = strB(4)

Auf die explizite Angabe der Eigenschaft Chars können Sie verzichten, da sie Default deklariert ist.

In der folgenden Tabelle finden Sie alle Eigenschaften der StringBuilder-Klasse zusammen aufgeführt.


Tabelle 10.6     Die Eigenschaften der Klasse »StringBuilder«

Eigenschaft Methode
Capacity Liefert oder setzt die Kapazität des StringBuilder-Objekts.
Chars Liefert das Zeichen einer genau spezifizierten Position aus der Zeichenfolge. Diese Eigenschaft ist der Indexer der Klasse.
Length Liefert die Länge der Zeichenfolge.
MaxCapacity Liefert die Maximalkapazität des StringBuilder-Objekts.


Galileo Computing

10.3.5 Die Methoden der Klasse »StringBuilder«  downtop

Wenn Sie sich zum ersten Mal die Liste der Methoden anschauen, werden Sie erstaunt sein, dass entgegen aller Erwartungen nur kaum mehr als eine Hand voll Operationen angeboten wird. Diese wollen wir uns nun ansehen.


Tabelle 10.7     Methoden der Klasse »StringBuilder«

Methode Eigenschaft
Append Hängt einer bestehenden StringBuilder-Instanz eine Zeichenfolge an.
AppendFormat Fügt der StringBuilder-Instanz eine Zeichenfolge mit Formatangaben an. Nähere Informationen zur Formatierung erfahren Sie in Abschnitt 10.6.
AppendLine Eine Zeile hinzufügen.
CopyTo Kopiert einen Teil des Objekts in ein Char-Array.
EnsureCapacity Stellt sicher, dass die Kapazität des StringBuilder-Objekts mindestens so groß wie angegeben ist.
Insert Fügt an einer spezifizierten Position eine Zeichenfolge ein.
Remove Löscht aus einer Zeichenfolge ab einer bestimmten Position eine Zeichensequenz.
Replace Ersetzt in der gesamten Zeichenfolge ein Zeichen durch ein anderes.

Zuweisung einer Zeichenkette an ein »StringBuilder«-Objekt

Soll einem StringBuilder-Objekt eine Zeichenfolge zugewiesen werden, kommt die Methode Append zum Einsatz, der aufgrund der vielen Überladungen praktisch jeder Datentyp übergeben werden kann:


Public Function Append(String) As StringBuilder
Public Function Append(Integer) As StringBuilder
Public Function Append(Byte) As StringBuilder
...

In den meisten Fällen wird dies vermutlich eine Zeichenfolge sein, z.  B.:


strB = strB.Append("Visual Studio")

Der Rückgabewert der Append-Methode ist die Referenz auf ein Objekt vom Typ StringBuilder, das die entsprechende Zeichenfolge enthält. Sie müssen Append auch aufrufen, wenn eine Referenz auf ein Objekt vom Typ StringBuilder vorliegt, das noch nicht initialisiert ist. Wenden Sie Append mehrfach hintereinander an, wird bei jedem Aufruf der Methode eine weitere Zeichenfolge hinter die bestehende angehängt. Das entspricht dem »+«-Operator auf String-Objekte.

Halten Sie sich immer vor Augen, dass ein StringBuilder-Objekt keine Zeichenfolge repräsentiert – dafür dient der Datentyp String. Wollen Sie sich den Inhalt eines StringBuilder-Objekts von einer Methode ausgeben lassen, die den Datentyp String als Übergabeparameter erwartet, müssen Sie deshalb mit der Methode ToString das StringBuilder-Objekt in einen String konvertieren.


Dim strBuilder As New StringBuilder()
Dim str As String = "Hello again"
strBuilder.Append(str)
Console.WriteLine(strBuilder.ToString())

Einfügen einer Zeichenfolge

Um an einer spezifizierten Position in einer Zeichenfolge eine zusätzliche einzufügen, rufen Sie die Insert-Methode auf. Diese ist in gleicher Weise wie Append überladen, allerdings ist die Parameterliste jeweils um einen Parameter vom Typ Integer ergänzt, der dem Index übergeben wird, ab dem die Zeichenfolge eingefügt werden soll.


Dim strB As New StringBuilder()
strB = strB.Append("fällt Schnee")
strB = strB.Insert(0, "Im Winter ")

Die Ausgabe dieses Codefragments lautet:


Im Winter fällt Schnee

Löschen aus einer Zeichenfolge

Während mit Insert eine Zeichenfolge eingefügt wird, kann mit Remove ab einer bestimmten Position eine bestimmte Anzahl von Zeichen gelöscht werden.


str.Remove(3, 2)

Mit dem ersten Parameter wird der Index beschrieben, bei dem der Löschvorgang beginnen soll, hier also beginnend mit dem vierten Zeichen. Über den zweiten Parameter teilen wir die Anzahl der zu löschenden Zeichen mit.

Ersetzen eines Zeichens oder einer Zeichenfolge

Die letzte der von uns behandelten Methoden ist Replace, die im Wesentlichen dieselben Möglichkeiten wie die Replace-Methode der Klasse String bietet.


Public Function Replace(Char, Char) As StringBuilder
Public Function Replace(String, String) As StringBuilder

Dem ersten Parameter wird mitgeteilt, welches Zeichen bzw. welche Zeichenfolge des StringBuilder-Objekts ersetzt werden soll, im zweiten Parameter sagen Sie, wodurch ersetzt wird.


Dim strBuilder As New StringBuilder
Dim str As String = "Ich hätte gerne ein Bier"
strBuilder.Append(str)
strBuilder = strBuilder.Replace("ein", "drei")
Console.Write("Meine Bestellung: ")
Console.WriteLine(strBuilder.ToString())

Sie sehen, mit Replace können Sie sogar vermeiden, mangels Flüssigkeitszufuhr aufgrund einer unüberlegt aufgegebenen Bestellung zu verdursten.


Galileo Computing

10.3.6 Allgemeine Anmerkungen  toptop

Damit sind aber auch schon die Möglichkeiten der Klasse StringBuilder nahezu ausgeschöpft. Es gibt keine Methoden, die das Auswerten eines Teilstrings ermöglichen, oder Methoden, die Teilstrings zurückliefern. Damit wird auch der doch recht eingeschränkte Einsatzbereich von StringBuilder-Objekten deutlich. Die Klasse String ist in ihren Fähigkeiten weit voraus, lässt mit ihren überladenen Methoden kaum Wünsche offen.

StringBuilder-Objekte werden Ihnen nicht sehr oft begegnen. Die meisten Methoden in der .NET-Klassenbibliothek, die mit Zeichenfolgen operieren, verwenden Referenzen des Typs String oder Arrays vom Typ Char. Am ehesten sind StringBuilder-Objekte dort sinnvoll einzusetzen, wo in einer Schleife bei jedem Schleifendurchlauf eine Operation mit der Zeichenfolge ausgeführt wird. Wenn die Kapazität des StringBuilder-Objekts groß genug festgelegt worden ist, ersparen Sie sich zudem die permanente Neuinstanziierung von String-Objekten und können so einen Beitrag zu einer besseren Performance der Anwendung leisten.

 <<   zurück
  
  Zum Katalog
Zum Katalog: Visual Basic 2005
Visual Basic 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual C# 2005






 Visual C# 2005


Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Das Programmierhandbuch SQL Server 2005






 Das Programmier-
 handbuch
 SQL Server 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de